home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <stdlib.h>
- #include <dos.h>
- #include <io.h>
- #include <sys\types.h>
- #include <sys\stat.h>
- #include <malloc.h>
- #include <fcntl.h>
-
- int fh;
- FILE *fp;
- long offset;
-
- void error(char *errstr)
- { printf(errstr);
- exit(1); }
-
- main(argc,argv)
- int argc;
- char *argv[];
- {
- char texname[10], patname[10];
- char *pnames, *pnam;
- char *texgarb, *texg;
- long numtexs, numpats, dummy, i;
- int numpat, scuz, dummi, j, k;
-
- if (argc != 4)
- error("Usage: retex <textfile> <pnames> <textures>\n");
-
- texname[8]='\0';
- patname[8]='\0';
-
- if (!(fp=fopen(argv[1], "rt")))
- error("Can't open TEXTURES.TXT.\n");
- if ((pnames=(char *)malloc(8192))==NULL)
- error("Can't even allocate 8K!\n");
- if ((texgarb=(char *)malloc(32768))==NULL)
- error("Can't allocate 32K now.\n");
- pnam=pnames+4;
- numpats=0;
- fscanf(fp, "%s", patname);
- while (strcmp(patname, "PATCHES")) fscanf(fp, "%s", patname);
- fscanf(fp, "%s", texname);
- while (strcmp(texname, "TEXTURES")) {
- numpats++;
- for (k=0; k<8; k++) patname[k]='\0';
- fscanf(fp, "%s %s", patname, texname);
- for (k=0; k<8; k++) *pnam++=patname[k];
- }
- *((long *)pnames)=numpats;
-
- numtexs=0;
- texg=texgarb+4;
- offset=0;
- fscanf(fp, "%s", texname);
- while (strcmp(texname, "EOF")) {
- numtexs++;
- *((long *)texg)=offset;
- texg+=4;
- for (j=0; j<7; j++) fscanf(fp, "%d", &scuz);
- offset+=22+10*scuz;
- for (j=0; j<scuz; j++) fscanf(fp, "%*d %*d %*d %*s %*d %*d");
- fscanf(fp, "%s", texname);
- }
- *((long *)texgarb)=numtexs;
- offset=texg-texgarb;
- texg=texgarb+4;
- for (i=0; i<numtexs; i++) {
- *((long *)texg)+=offset;
- texg+=4;
- }
- fclose(fp);
- fp=fopen("textures.txt", "rt");
- fscanf(fp, "%s", texname);
- while (strcmp(texname, "TEXTURES")) fscanf(fp, "%s", texname);
- for (k=0; k<8; k++) texname[k]='\0';
- fscanf(fp, "%s", texname);
- while (strcmp(texname, "EOF")) {
- for (k=0; k<8; k++) *(texg++)=texname[k];
- for (j=0; j<7; j++) {
- fscanf(fp, "%d", &scuz);
- *((int *)texg)=scuz;
- texg+=2;
- }
- for (j=0; j<scuz; j++) {
- for (k=0; k<3; k++) {
- fscanf(fp, "%d", &dummi);
- *((int *)texg)=dummi;
- texg+=2;
- }
- fscanf(fp, "%s", patname);
- for (k=0; k<2; k++) {
- fscanf(fp, "%d", &dummi);
- *((int *)texg)=dummi;
- texg+=2;
- }
- }
- for (k=0; k<8; k++) texname[k]='\0';
- fscanf(fp, "%s", texname);
- }
- fclose(fp);
-
- fh=open(argv[2], O_CREAT|O_BINARY|O_WRONLY, S_IREAD|S_IWRITE);
- write(fh, pnames, 4+8*numpats);
- close(fh);
- fh=open(argv[3], O_CREAT|O_BINARY|O_WRONLY, S_IREAD|S_IWRITE);
- write(fh, texgarb, texg-texgarb);
- close(fh);
-
- free(pnames);
- free(texgarb);
-
- exit(0);
- }